home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / impacket / ntlm.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2006-06-30  |  9KB  |  181 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. from impacket.structure import Structure
  5.  
  6. try:
  7.     from Crypto.Cipher import DES
  8.     from Crypto.Hash import MD4
  9.     POW = None
  10. except Exception:
  11.     
  12.     try:
  13.         import POW
  14.     except Exception:
  15.         pass
  16.     except:
  17.         None<EXCEPTION MATCH>Exception
  18.     
  19.  
  20.     None<EXCEPTION MATCH>Exception
  21.  
  22. NTLM_AUTH_NONE = 1
  23. NTLM_AUTH_CONNECT = 2
  24. NTLM_AUTH_CALL = 3
  25. NTLM_AUTH_PKT = 4
  26. NTLM_AUTH_PKT_INTEGRITY = 5
  27. NTLM_AUTH_PKT_PRIVACY = 6
  28. NTLMSSP_KEY_56 = 0x80000000L
  29. NTLMSSP_KEY_EXCHANGE = 1073741824
  30. NTLMSSP_KEY_128 = 536870912
  31. NTLMSSP_TARGET_INFO = 8388608
  32. NTLMSSP_NTLM2_KEY = 524288
  33. NTLMSSP_CHALL_NOT_NT = 262144
  34. NTLMSSP_CHALL_ACCEPT = 131072
  35. NTLMSSP_CHALL_INIT = 65536
  36. NTLMSSP_ALWAYS_SIGN = 32768
  37. NTLMSSP_LOCAL_CALL = 16384
  38. NTLMSSP_WORKSTATION = 8192
  39. NTLMSSP_DOMAIN = 4096
  40. NTLMSSP_NTLM_KEY = 512
  41. NTLMSSP_NETWARE = 256
  42. NTLMSSP_LM_KEY = 128
  43. NTLMSSP_DATAGRAM = 64
  44. NTLMSSP_SEAL = 32
  45. NTLMSSP_SIGN = 16
  46. NTLMSSP_TARGET = 4
  47. NTLMSSP_OEM = 2
  48. NTLMSSP_UNICODE = 1
  49.  
  50. class NTLMAuthHeader(Structure):
  51.     commonHdr = (('auth_type', 'B=10'), ('auth_level', 'B'), ('auth_pad_len', 'B=0'), ('auth_rsvrd', '"\x00'), ('auth_ctx_id', '<L=747920'))
  52.     structure = (('data', ':'),)
  53.  
  54.  
  55. class NTLMAuthNegotiate(NTLMAuthHeader):
  56.     structure = (('', '"NTLMSSP\x00'), ('message_type', '<L=1'), ('flags', '<L'), ('domain_len', '<H-domain_name'), ('domain_max_len', '<H-domain_name'), ('domain_offset', '<L'), ('host_len', '<H-host_name'), ('host_maxlen', '<H-host_name'), ('host_offset', '<L'), ('host_name', ':'), ('domain_name', ':'))
  57.     
  58.     def __init__(self):
  59.         NTLMAuthHeader.__init__(self)
  60.         self['flags'] = NTLMSSP_KEY_128 | NTLMSSP_KEY_EXCHANGE | NTLMSSP_NTLM_KEY | NTLMSSP_UNICODE | NTLMSSP_SIGN | NTLMSSP_SEAL | 0
  61.         self['host_name'] = ''
  62.         self['domain_name'] = ''
  63.  
  64.     
  65.     def __str__(self):
  66.         self['host_offset'] = 32
  67.         self['domain_offset'] = 32 + len(self['host_name'])
  68.         return NTLMAuthHeader.__str__(self)
  69.  
  70.  
  71.  
  72. class NTLMAuthChallenge(NTLMAuthHeader):
  73.     structure = (('', '"NTLMSSP\x00'), ('message_type', '<L=2'), ('domain_len', '<H-domain_name'), ('domain_max_len', '<H-domain_name'), ('domain_offset', '<L'), ('flags', '<L'), ('challenge', '8s'), ('reserved', '"\x00\x00\x00\x00\x00\x00\x00\x00'), ('domain_name', ':'))
  74.  
  75.  
  76. class NTLMAuthChallengeResponse(NTLMAuthHeader):
  77.     structure = (('', '"NTLMSSP\x00'), ('message_type', '<L=3'), ('lanman_len', '<H-lanman'), ('lanman_max_len', '<H-lanman'), ('lanman_offset', '<L'), ('ntlm_len', '<H-ntlm'), ('ntlm_max_len', '<H-ntlm'), ('ntlm_offset', '<L'), ('domain_len', '<H-domain_name'), ('domain_max_len', '<H-domain_name'), ('domain_offset', '<L'), ('user_len', '<H-user_name'), ('user_max_len', '<H-user_name'), ('user_offset', '<L'), ('host_len', '<H-host_name'), ('host_max_len', '<H-host_name'), ('host_offset', '<L'), ('session_key_len', '<H-session_key'), ('session_key_max_len', '<H-session_key'), ('session_key_offset', '<L'), ('flags', '<L'), ('domain_name', ':'), ('user_name', ':'), ('host_name', ':'), ('lanman', ':'), ('ntlm', ':'), ('session_key', ':'))
  78.     
  79.     def __init__(self, username, password, challenge):
  80.         NTLMAuthHeader.__init__(self)
  81.         self['session_key'] = ''
  82.         self['user_name'] = username.encode('utf-16le')
  83.         self['domain_name'] = ''
  84.         self['host_name'] = ''
  85.         self['flags'] = NTLMSSP_KEY_128 | NTLMSSP_KEY_EXCHANGE | NTLMSSP_NTLM_KEY | NTLMSSP_UNICODE | NTLMSSP_SIGN | NTLMSSP_SEAL | 0
  86.         if username and password:
  87.             lmhash = compute_lmhash(password)
  88.             nthash = compute_nthash(password)
  89.             self['lanman'] = get_ntlmv1_response(lmhash, challenge)
  90.             self['ntlm'] = get_ntlmv1_response(nthash, challenge)
  91.         else:
  92.             self['lanman'] = ''
  93.             self['ntlm'] = ''
  94.             if not self['host_name']:
  95.                 self['host_name'] = 'NULL'.encode('utf-16le')
  96.             
  97.  
  98.     
  99.     def __str__(self):
  100.         self['domain_offset'] = 64
  101.         self['user_offset'] = 64 + len(self['domain_name'])
  102.         self['host_offset'] = self['user_offset'] + len(self['user_name'])
  103.         self['lanman_offset'] = self['host_offset'] + len(self['host_name'])
  104.         self['ntlm_offset'] = self['lanman_offset'] + len(self['lanman'])
  105.         self['session_key_offset'] = self['ntlm_offset'] + len(self['ntlm'])
  106.         return NTLMAuthHeader.__str__(self)
  107.  
  108.  
  109.  
  110. class ImpacketStructure(Structure):
  111.     
  112.     def set_parent(self, other):
  113.         self.parent = other
  114.  
  115.     
  116.     def get_packet(self):
  117.         return str(self)
  118.  
  119.     
  120.     def get_size(self):
  121.         return len(self)
  122.  
  123.  
  124.  
  125. class NTLMAuthVerifier(NTLMAuthHeader):
  126.     structure = (('version', '<L=1'), ('data', '12s'))
  127.  
  128. KNOWN_DES_INPUT = 'KGS!@#$%'
  129.  
  130. def __expand_DES_key(key):
  131.     key = key[:7]
  132.     key += '\x00' * (7 - len(key))
  133.     s = chr((ord(key[0]) >> 1 & 127) << 1)
  134.     s = s + chr(((ord(key[0]) & 1) << 6 | ord(key[1]) >> 2 & 63) << 1)
  135.     s = s + chr(((ord(key[1]) & 3) << 5 | ord(key[2]) >> 3 & 31) << 1)
  136.     s = s + chr(((ord(key[2]) & 7) << 4 | ord(key[3]) >> 4 & 15) << 1)
  137.     s = s + chr(((ord(key[3]) & 15) << 3 | ord(key[4]) >> 5 & 7) << 1)
  138.     s = s + chr(((ord(key[4]) & 31) << 2 | ord(key[5]) >> 6 & 3) << 1)
  139.     s = s + chr(((ord(key[5]) & 63) << 1 | ord(key[6]) >> 7 & 1) << 1)
  140.     s = s + chr((ord(key[6]) & 127) << 1)
  141.     return s
  142.  
  143.  
  144. def __DES_block(key, msg):
  145.     if POW:
  146.         cipher = POW.Symmetric(POW.DES_ECB)
  147.         cipher.encryptInit(__expand_DES_key(key))
  148.         return cipher.update(msg)
  149.     else:
  150.         cipher = DES.new(__expand_DES_key(key), DES.MODE_ECB)
  151.         return cipher.encrypt(msg)
  152.  
  153.  
  154. def ntlmssp_DES_encrypt(key, challenge):
  155.     answer = __DES_block(key[:7], challenge)
  156.     answer += __DES_block(key[7:14], challenge)
  157.     answer += __DES_block(key[14:], challenge)
  158.     return answer
  159.  
  160.  
  161. def compute_lmhash(password):
  162.     password = password.upper()
  163.     lmhash = __DES_block(password[:7], KNOWN_DES_INPUT)
  164.     lmhash += __DES_block(password[7:14], KNOWN_DES_INPUT)
  165.     return lmhash
  166.  
  167.  
  168. def compute_nthash(password):
  169.     password = unicode(password).encode('utf_16le')
  170.     if POW:
  171.         hash = POW.Digest(POW.MD4_DIGEST)
  172.     else:
  173.         hash = MD4.new()
  174.     hash.update(password)
  175.     return hash.digest()
  176.  
  177.  
  178. def get_ntlmv1_response(key, challenge):
  179.     return ntlmssp_DES_encrypt(key, challenge)
  180.  
  181.